home *** CD-ROM | disk | FTP | other *** search
/ Visual Cafe 3 / Visual Cafe 3.ISO / Vcafe / JFC.bin / MacFrameBorder.java < prev    next >
Text File  |  1998-06-30  |  8KB  |  245 lines

  1. /*
  2.  * @(#)MacFrameBorder.java    1.6 98/02/02
  3.  *
  4.  * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  *
  19.  */
  20.  
  21.  
  22. package com.sun.java.swing.plaf.mac;
  23.  
  24. import java.awt.Graphics;
  25. import java.awt.Dimension;
  26. import java.awt.Rectangle;
  27. import java.awt.Color;
  28. import java.awt.Insets;
  29.  
  30. import java.awt.*;
  31. import java.beans.*;
  32.  
  33. import com.sun.java.swing.*;
  34. import com.sun.java.swing.border.AbstractBorder;
  35. import com.sun.java.swing.plaf.UIResource;
  36.  
  37. /**
  38.  * <p>
  39.  * Warning: serialized objects of this class will not be compatible with
  40.  * future swing releases.  The current serialization support is appropriate
  41.  * for short term storage or RMI between Swing1.0 applications.  It will
  42.  * not be possible to load serialized Swing1.0 objects with future releases
  43.  * of Swing.  The JDK1.2 release of Swing will be the compatibility
  44.  * baseline for the serialized form of Swing objects.
  45.  *
  46.  * @version @(#)MacFrameBorder.java    1.0 11/24/97
  47.  * @author Symantec
  48.  * @author David Bustin
  49.  */
  50.  
  51. public class MacFrameBorder extends AbstractBorder implements UIResource {
  52.  
  53.     JComponent jcomp;
  54.     Color frameHighlight;
  55.     Color frameColor;
  56.     Color frameShadow;
  57.     Color frameBackground;
  58.  
  59.     protected static Color GSWColor = UIManager.getColor("GrayscaleAppearanceW");
  60.     protected static Color GSBColor = UIManager.getColor("GrayscaleAppearanceB");
  61.     protected static Color GS2Color = UIManager.getColor("GrayscaleAppearance2");
  62.     protected static Color GS3Color = UIManager.getColor("GrayscaleAppearance3");
  63.     protected static Color GS6Color = UIManager.getColor("GrayscaleAppearance6");
  64.     protected static Color GS10Color = UIManager.getColor("GrayscaleAppearance10");
  65.     
  66.     // The width of the border
  67.     public final static int BORDER_SIZE = 7;
  68.  
  69.     /** Constructs an FrameBorder for the JComponent <b>comp</b>.
  70.       */
  71.     public MacFrameBorder(JComponent comp) {
  72.         jcomp = comp;
  73.     }
  74.  
  75.     /** Sets the FrameBorder's JComponent.
  76.       */
  77.     public void setComponent(JComponent comp) {
  78.         jcomp = comp;
  79.     }
  80.  
  81.     /** Returns the FrameBorder's JComponent.
  82.       * @see #setComponent
  83.       */
  84.     public JComponent component() {
  85.         return jcomp;
  86.     }
  87.  
  88.     protected Color getFrameHighlight() {
  89.         return frameHighlight;
  90.     }
  91.  
  92.     protected Color getFrameColor() {
  93.         return frameColor;
  94.     }
  95.     
  96.     protected Color getFrameShadow() {
  97.         return frameShadow;
  98.     }
  99.  
  100.     protected Color getFrameBackground() {
  101.         return frameBackground;
  102.     }
  103.     
  104.     static Insets insets = new Insets(BORDER_SIZE, BORDER_SIZE,
  105.                                       BORDER_SIZE, BORDER_SIZE);
  106.  
  107.     public Insets getBorderInsets(Component c) {
  108.         return insets;
  109.     }
  110.  
  111.    /** Draws the FrameBorder's top border.
  112.      */
  113.     protected boolean drawTopBorder(Component c, Graphics g, 
  114.                                     int x, int y, int width, int height) {
  115.         Rectangle titleBarRect = new Rectangle(x, y, width, BORDER_SIZE);
  116.         if (!g.getClipBounds().intersects(titleBarRect)) {
  117.             return false;
  118.         }
  119.  
  120.         g.setColor(frameColor);
  121.         g.drawLine(1, 1, width - 2, 1);
  122.         
  123.         g.setColor(frameHighlight);
  124.         g.drawLine(2, 2, width - 3, 2);
  125.         
  126.         g.setColor(frameBackground);
  127.         g.fillRect(3, 3, width - 6, 4);
  128.  
  129.         return true;
  130.     }
  131.  
  132.     /** Draws the FrameBorder's left border.
  133.       */
  134.     protected boolean drawLeftBorder(Component c, Graphics g, int x, int y, 
  135.                                int width, int height) {
  136.         Rectangle borderRect = 
  137.             new Rectangle(0, 0, getBorderInsets(c).left, height);
  138.         if (!g.getClipBounds().intersects(borderRect)) {
  139.             return false;
  140.         }
  141.         
  142.         g.setColor(frameBackground);
  143.         g.fillRect(3, 5, 6, height - 11);
  144.  
  145.         g.setColor(frameColor);
  146.         g.drawLine(1, 2, 1, height - 3);
  147.  
  148.         g.setColor(frameHighlight);
  149.         g.drawLine(2, 3, 2, height - 4);
  150.  
  151.         return true;
  152.     }
  153.  
  154.     /** Draws the FrameBorder's right border.
  155.       */
  156.     protected boolean drawRightBorder(Component c, Graphics g, int x, int y, 
  157.                                 int width, int height) {
  158.         Rectangle borderRect = new Rectangle(
  159.             width - getBorderInsets(c).right, 0,
  160.             getBorderInsets(c).right, height);
  161.         if (!g.getClipBounds().intersects(borderRect)) {
  162.             return false;
  163.         }
  164.  
  165.         int startX = width - BORDER_SIZE;
  166.         
  167.         g.setColor(frameBackground);
  168.         g.fillRect(startX, 5, startX + 3, height - 11);
  169.  
  170.         g.setColor(GS6Color);
  171.         g.drawLine(startX + 4, 3, startX + 4, height - 4);
  172.  
  173.         g.setColor(frameColor);
  174.         g.drawLine(startX + 5, 2, startX + 5, height - 3);
  175.  
  176.         g.setColor(frameShadow);
  177.         g.drawLine(startX + 6, 1, startX + 6, height - 1);
  178.  
  179.         return true;
  180.     }
  181.  
  182.     /** Draws the FrameBorder's bottom border.
  183.       */
  184.     protected boolean drawBottomBorder(Component c, Graphics g, int x, int y, 
  185.                                  int width, int height) {
  186.         Rectangle    borderRect;
  187.         int     marginHeight, startY;
  188.  
  189.         borderRect = new Rectangle(0, height - getBorderInsets(c).bottom,
  190.                                   width, getBorderInsets(c).bottom);
  191.         if (!g.getClipBounds().intersects(borderRect)) {
  192.             return false;
  193.         }
  194.  
  195.         startY = height - BORDER_SIZE + 1;
  196.         
  197.         g.setColor(frameBackground);
  198.         g.fillRect(3, startY, width - 6, 3);
  199.  
  200.         g.setColor(GS6Color);
  201.         g.drawLine(2, startY + 3, width - 3, startY + 3);
  202.  
  203.         g.setColor(frameColor);
  204.         g.drawLine(1, startY + 4, width - 2, startY + 4);
  205.     
  206.         g.setColor(frameShadow);
  207.         g.drawLine(2, startY + 5, width - 1, startY + 5);
  208.  
  209.         return true;
  210.     }
  211.  
  212.     // Returns true if the associated component has focus.
  213.     protected boolean isActiveFrame() {
  214.         return jcomp.hasFocus();
  215.     }
  216.  
  217.     /** Draws the FrameBorder in the given Rect.  Calls
  218.       * <b>drawTitleBar</b>, <b>drawLeftBorder</b>, <b>drawRightBorder</b> and
  219.       * <b>drawBottomBorder</b>.
  220.       */
  221.     public void paintBorder(Component c, Graphics g, 
  222.                             int x, int y, int width, int height) {
  223.         if (isActiveFrame()) {
  224.             frameColor = GSBColor;
  225.             frameHighlight = GSWColor;
  226.             frameBackground = GS3Color;
  227.             } 
  228.         else 
  229.             {
  230.             frameColor = GS10Color;
  231.             frameHighlight = GS2Color;
  232.             frameBackground = GS2Color;
  233.             }
  234.  
  235.         frameShadow = frameColor;
  236.  
  237.         drawTopBorder(c, g, x, y, width, height);
  238.         drawLeftBorder(c, g, x, y, width, height);
  239.         drawRightBorder(c, g, x, y, width, height);
  240.         drawBottomBorder(c, g, x, y, width, height);
  241.         g.setColor(GSBColor);
  242.         g.drawRect(x+BORDER_SIZE-1, y+BORDER_SIZE+16, width-2*BORDER_SIZE+1, height-2*BORDER_SIZE-16);
  243.      }
  244. }
  245.